From 65749e4633aebf378639c72d1bcabbe089dd57f7 Mon Sep 17 00:00:00 2001 From: "Ian.Campbell@xensource.com" Date: Wed, 15 Mar 2006 10:33:43 +0000 Subject: [PATCH] There is no need to pin page tables when XENFEAT_writable_page_tables is enabled. Signed-off-by: Ian Campbell --- linux-2.6-xen-sparse/arch/i386/mm/pgtable-xen.c | 6 ++++++ linux-2.6-xen-sparse/arch/x86_64/mm/pageattr-xen.c | 9 +++++++++ 2 files changed, 15 insertions(+) diff --git a/linux-2.6-xen-sparse/arch/i386/mm/pgtable-xen.c b/linux-2.6-xen-sparse/arch/i386/mm/pgtable-xen.c index c2d97b5b2d..b6109de24e 100644 --- a/linux-2.6-xen-sparse/arch/i386/mm/pgtable-xen.c +++ b/linux-2.6-xen-sparse/arch/i386/mm/pgtable-xen.c @@ -587,6 +587,8 @@ static void pgd_test_and_unpin(pgd_t *pgd) void mm_pin(struct mm_struct *mm) { + if (xen_feature(XENFEAT_writable_page_tables)) + return; spin_lock(&mm->page_table_lock); __pgd_pin(mm->pgd); spin_unlock(&mm->page_table_lock); @@ -594,6 +596,8 @@ void mm_pin(struct mm_struct *mm) void mm_unpin(struct mm_struct *mm) { + if (xen_feature(XENFEAT_writable_page_tables)) + return; spin_lock(&mm->page_table_lock); __pgd_unpin(mm->pgd); spin_unlock(&mm->page_table_lock); @@ -602,6 +606,8 @@ void mm_unpin(struct mm_struct *mm) void mm_pin_all(void) { struct page *page; + if (xen_feature(XENFEAT_writable_page_tables)) + return; for (page = pgd_list; page; page = (struct page *)page->index) { if (!test_bit(PG_pinned, &page->flags)) __pgd_pin((pgd_t *)page_address(page)); diff --git a/linux-2.6-xen-sparse/arch/x86_64/mm/pageattr-xen.c b/linux-2.6-xen-sparse/arch/x86_64/mm/pageattr-xen.c index a39d4ab23c..079f471c37 100644 --- a/linux-2.6-xen-sparse/arch/x86_64/mm/pageattr-xen.c +++ b/linux-2.6-xen-sparse/arch/x86_64/mm/pageattr-xen.c @@ -71,6 +71,9 @@ static void mm_walk(struct mm_struct *mm, pgprot_t flags) void mm_pin(struct mm_struct *mm) { + if (xen_feature(XENFEAT_writable_page_tables)) + return; + spin_lock(&mm->page_table_lock); mm_walk(mm, PAGE_KERNEL_RO); @@ -94,6 +97,9 @@ void mm_pin(struct mm_struct *mm) void mm_unpin(struct mm_struct *mm) { + if (xen_feature(XENFEAT_writable_page_tables)) + return; + spin_lock(&mm->page_table_lock); xen_pgd_unpin(__pa(mm->pgd)); @@ -116,6 +122,9 @@ void mm_unpin(struct mm_struct *mm) void mm_pin_all(void) { + if (xen_feature(XENFEAT_writable_page_tables)) + return; + while (!list_empty(&mm_unpinned)) mm_pin(list_entry(mm_unpinned.next, struct mm_struct, context.unpinned)); -- 2.30.2